import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

/**
 * 行业数据状态管理
 * 管理字典数据、枚举值、行业分类等静态数据
 */
export const useIndustryStore = defineStore('industry', () => {
  // 字典数据
  const dictData = ref({
    // 卡片类型
    cardTypes: [
      { label: '身份证', value: 'id_card' },
      { label: '营业执照', value: 'business_license' },
      { label: '组织机构代码证', value: 'org_code' },
      { label: '税务登记证', value: 'tax_cert' },
      { label: '其他', value: 'other' }
    ],
    
    // 卡片状态
    cardStatus: [
      { label: '待制作', value: 'pending' },
      { label: '制作中', value: 'making' },
      { label: '已完成', value: 'completed' },
      { label: '已签收', value: 'received' },
      { label: '已取消', value: 'cancelled' }
    ],
    
    // 调解状态
    mediationStatus: [
      { label: '待受理', value: 'pending' },
      { label: '受理中', value: 'processing' },
      { label: '调解中', value: 'mediating' },
      { label: '已完成', value: 'completed' },
      { label: '已撤销', value: 'cancelled' }
    ],
    
    // 通知类型
    noticeTypes: [
      { label: '政府通知', value: 'government' },
      { label: '教育培训', value: 'education' },
      { label: '系统公告', value: 'system' },
      { label: '其他', value: 'other' }
    ],
    
    // 部门列表
    departments: [
      { label: '基金监管部', value: 'fund_supervision' },
      { label: '风险控制部', value: 'risk_control' },
      { label: '合规部', value: 'compliance' },
      { label: '信息技术部', value: 'it' },
      { label: '人力资源部', value: 'hr' },
      { label: '财务部', value: 'finance' }
    ],
    
    // 职位列表
    positions: [
      { label: '监管员', value: 'supervisor' },
      { label: '分析师', value: 'analyst' },
      { label: '专员', value: 'specialist' },
      { label: '主管', value: 'manager' },
      { label: '经理', value: 'director' },
      { label: '总监', value: 'general_manager' }
    ]
  })

  // 行业分类数据
  const industryCategories = ref([
    {
      id: '01',
      name: '银行业',
      children: [
        { id: '0101', name: '商业银行' },
        { id: '0102', name: '政策性银行' },
        { id: '0103', name: '农村金融机构' }
      ]
    },
    {
      id: '02',
      name: '证券业',
      children: [
        { id: '0201', name: '证券公司' },
        { id: '0202', name: '基金管理公司' },
        { id: '0203', name: '期货公司' }
      ]
    },
    {
      id: '03',
      name: '保险业',
      children: [
        { id: '0301', name: '财产保险公司' },
        { id: '0302', name: '人身保险公司' },
        { id: '0303', name: '再保险公司' }
      ]
    },
    {
      id: '04',
      name: '其他金融机构',
      children: [
        { id: '0401', name: '信托公司' },
        { id: '0402', name: '金融租赁公司' },
        { id: '0403', name: '消费金融公司' }
      ]
    }
  ])

  // 地区数据
  const regions = ref([
    {
      code: '110000',
      name: '北京市',
      children: [
        { code: '110100', name: '北京市' }
      ]
    },
    {
      code: '310000',
      name: '上海市',
      children: [
        { code: '310100', name: '上海市' }
      ]
    },
    {
      code: '440000',
      name: '广东省',
      children: [
        { code: '440100', name: '广州市' },
        { code: '440300', name: '深圳市' },
        { code: '440600', name: '佛山市' }
      ]
    }
  ])

  /**
   * 根据类型获取字典数据
   * @param {string} type - 字典类型
   * @returns {Array} 字典数据数组
   */
  const getDictByType = (type) => {
    return dictData.value[type] || []
  }

  /**
   * 根据字典类型和值获取标签
   * @param {string} type - 字典类型
   * @param {string} value - 字典值
   * @returns {string} 字典标签
   */
  const getDictLabel = (type, value) => {
    const dict = getDictByType(type)
    const item = dict.find(item => item.value === value)
    return item ? item.label : value
  }

  /**
   * 获取行业分类树形数据
   * @returns {Array} 行业分类数据
   */
  const getIndustryTree = computed(() => {
    return industryCategories.value
  })

  /**
   * 获取扁平化的行业数据
   * @returns {Array} 扁平化行业数据
   */
  const getFlatIndustries = computed(() => {
    const result = []
    industryCategories.value.forEach(category => {
      if (category.children) {
        category.children.forEach(child => {
          result.push({
            id: child.id,
            name: child.name,
            parentId: category.id,
            parentName: category.name
          })
        })
      }
    })
    return result
  })

  /**
   * 初始化字典数据
   */
  const initDictData = async () => {
    try {
      // 这里可以从API获取最新的字典数据
      console.log('初始化字典数据')
      // const response = await api.getDictData()
      // dictData.value = response.data
    } catch (error) {
      console.error('初始化字典数据失败:', error)
    }
  }

  /**
   * 更新字典数据
   * @param {string} type - 字典类型
   * @param {Array} data - 字典数据
   */
  const updateDictData = (type, data) => {
    dictData.value[type] = data
  }

  return {
    // 状态
    dictData,
    industryCategories,
    regions,
    
    // 计算属性
    getIndustryTree,
    getFlatIndustries,
    
    // 方法
    getDictByType,
    getDictLabel,
    initDictData,
    updateDictData
  }
})